#include "Attribute.h"

namespace xml{

    /********************************************
     *              Public
     ********************************************/

        /********************************************
         *              Constructors
         ********************************************/

            Attribute::Attribute(string name, string value){
                Error   =false;
                Name  =   name;
                Value =   value;
            }

            Attribute::Attribute(ifstream &f){
                Error   =false;
                LoadAttribute(f);
            }

        /********************************************
         *              Methods
         ********************************************/


    /********************************************
     *              Private
     ********************************************/

        /********************************************
         *              Methods
         ********************************************/

            bool Attribute::LoadAttribute(ifstream &file){
                try{
                    if(!LoadName(file)){throw(0);}
                    if(!LoadValue(file)){throw(0);}
                }catch(int error){
                    Error=true;
                    printf("Error : Could not load attribute");
                }
            }

            bool Attribute::LoadName(ifstream &file){
                try{
                    string str;
                    char c=file.get();

                    while(c!='='){
                        if(XML::IsEmptyChar(c) || c=='<' || c=='"'){
                            throw("An attribute without a value is invalid");
                        }
                        str+=c;
                        c=file.get();
                    }
                    Name=str;
                    return true;
                }catch(string error){
                    printf("Error : %s \n", error.c_str());
                }
            }

            bool Attribute::LoadValue(ifstream &file){
                try{
                    string str;
                    char c=file.get();
                    if(c!='"'){
                        throw("No guillemet");
                    }
                    c=file.get();
                    while(c!='"'){
                        str+=c;
                        c=file.get();
                    }
                    Value=str;
                    return true;
                }catch(string error){
                    printf("Error : %s \n", error.c_str());
                }
            }

            void Attribute::Print(){
                printf(" Attribute : %s=\"%s\" \n", Name.c_str(), Value.c_str());
            }

            void Attribute::Save(ofstream &f){
                f<<Name<<"=\""<<Value<<"\"";
            }
}
